package q1.project.modules.system.role.dao;

import java.util.List;
import java.util.Optional;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
import q1.project.common.enums.EnableStatusEnum;
import q1.project.modules.system.role.entity.MenuEntity;

/**
 * 菜单数据访问对象
 *
 * @author Q1 Team
 * @version 1.0
 */
@Repository
public interface MenuDao
    extends JpaRepository<MenuEntity, String>, JpaSpecificationExecutor<MenuEntity> {

  /** 根据菜单编码查询 */
  Optional<MenuEntity> findByMenuCode(String menuCode);

  /** 根据父菜单ID查询 */
  List<MenuEntity> findByParentIdOrderBySortOrderAsc(String parentId);

  /** 查询所有顶级菜单 */
  List<MenuEntity> findByParentIdIsNullOrderBySortOrderAsc();

  /** 根据租户ID查询所有菜单 */
  List<MenuEntity> findByTenantIdOrderBySortOrderAsc(String tenantId);

  /** 根据租户ID分页查询菜单 */
  Page<MenuEntity> findByTenantId(String tenantId, Pageable pageable);

  /** 搜索菜单 注意：此方法应在 Service 层使用 WhereBuilderNow 实现，支持动态查询 */

  /** 根据状态查询菜单 */
  List<MenuEntity> findByStatusOrderBySortOrderAsc(EnableStatusEnum status);
}
